package com.amado.course03;

/**
 * >>左移
 * <<右移
 * 位运算
 * & 与
 * | 或
 * ^ 异或
 * ~ 非
 * @author wangyl-910
 * @description
 * @date 2018/4/4
 * @see
 */
public class BitOperator {
    public static void main(String[] args) {
        // 二进制 1（十进制1）左移1位 变成二进制10(十进制2)
        System.out.println(1 << 1);
        // 二进制 1（十进制1）左移2位变成二进制100(十进制4)
        System.out.println(1 << 2);
        // 二进制 1（十进制1）左移3位变成二进制1000(十进制8)
        System.out.println(1 << 3);
        // 二进制1000(十进制8)右移1位变成二进制100(十进制4)
        System.out.println(8 >> 1);
        // 二进制1000(十进制8)右移2位变成二进制10(十进制2)
        System.out.println(8 >> 2);
        // 二进制1000(十进制8)右移3位变成二进制1(十进制1)
        System.out.println(8 >> 3);
        // 二进制1000(十进制8)右移4位变成二进制0(十进制0)
        System.out.println(8 >> 4);
        //与 二进制同是为1则为1，111（7） &011（3)= 011（3）
        //与 二进制同是为1则为1，111（7） &010（2)= 010（2）
        System.out.println(7&3);
        System.out.println(7&2);
        //或 二进制有一个值为1则为1，或者说同时为0才为0，其它的都为1，011（3） |100（4)= 111（7）
        //或 二进制有一个值为1则为1，或者说同时为0才为0，其它的都为1，101（5） |011（3)= 111（7）
        //或 二进制有一个值为1则为1，或者说同时为0才为0，其它的都为1，100（4） |001（1)= 101（5）
        System.out.println(3|4);
        System.out.println(5|3);
        System.out.println(4|1);
        //或异运算两个数转为二进制，如果相同则为0，不相同则为1。
        //或异运算两个数转为二进制，如果相同则为0，不相同则为1，011（3） ^100（4)= 111（7）
        //或异运算两个数转为二进制，如果相同则为0，不相同则为1，101（5） ^011（3)= 110（6）
        //或异运算两个数转为二进制，如果相同则为0，不相同则为1，100（4） ^001（1)= 101（5）
        System.out.println(3^4);
        System.out.println(5^3);
        System.out.println(4^1);
        //非运算010，反码
        System.out.println(~2);
        //101 完全体11111111 11111111 11111111 11111101
        System.out.println(~2);
        System.out.println(Integer.toBinaryString(2));
        //11111111 11111111 11111111 11111101
        System.out.println(Integer.toBinaryString(-3));
        //十进制转换为10进制
        System.out.println(Integer.parseInt("11111101",2));
    }
}
